<html>
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"/>
  <title>
   Spark Streaming和Kafka整合开发指南  | 数螺 | NAUT IDEA
  </title>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" rel="stylesheet"/>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
  <style type="text/css">
   #xmain img {
                  max-width: 100%;
                  display: block;
                  margin-top: 10px;
                  margin-bottom: 10px;
                }

                #xmain p {
                    line-height:150%;
                    font-size: 16px;
                    margin-top: 20px;
                }

                #xmain h2 {
                    font-size: 24px;
                }

                #xmain h3 {
                    font-size: 20px;
                }

                #xmain h4 {
                    font-size: 18px;
                }


                .header {
	           background-color: #0099ff;
	           color: #ffffff;
	           margin-bottom: 20px;
	        }

	        .header p {
                  margin: 0px;
                  padding: 10px 0;
                  display: inline-block;  
                  vertical-align: middle;
                  font-size: 16px;
               }

               .header a {
                 color: white;
               }

              .header img {
                 height: 25px;
              }
  </style>
  <script src="http://cdn.bootcss.com/jquery/3.0.0/jquery.min.js">
  </script>
  <script src="http://nautstatic-10007657.file.myqcloud.com/static/css/readability.min.js" type="text/javascript">
  </script>
  <script type="text/javascript">
   $(document).ready(function() {
                 var loc = document.location;
                 var uri = {
                  spec: "http://dataunion.org/15193.html",
                  host: "http://dataunion.org",
                  prePath: "http://dataunion.org",
                  scheme: "http",
                  pathBase: "http://dataunion.org/"
                 };
    
                 var documentClone = document.cloneNode(true);
                 var article = new Readability(uri, documentClone).parse();
     
                 document.getElementById("xmain").innerHTML = article.content;
                });
  </script>
  <!-- 1466459424: Accept with keywords: (title(0.25):指南,Spark,数盟,社区, topn(0.3):指南,社区,并行,数盟,行业资讯,数据挖掘,工具,数据分析,文件,人工智能,分区,职业规划,参数,文章,基础架构,Spark,方法,编程,语义,偏移量,可视化,spark,接收数据,安装包,日志,编程语言,方式,数据,应用程序,行业).-->
 </head>
 <body onload="">
  <div class="header">
   <div class="container">
    <div class="row">
     <div class="col-xs-6 col-sm-6 text-left">
      <a href="/databee">
       <img src="http://nautidea-10007657.cos.myqcloud.com/logo_white.png"/>
      </a>
      <a href="/databee">
       <p>
        数螺
       </p>
      </a>
     </div>
     <div class="hidden-xs col-sm-6 text-right">
      <p>
       致力于数据科学的推广和知识传播
      </p>
     </div>
    </div>
   </div>
  </div>
  <div class="container text-center">
   <h1>
    Spark Streaming和Kafka整合开发指南
   </h1>
  </div>
  <div class="container" id="xmain">
   ﻿﻿
   <title>
    Spark Streaming和Kafka整合开发指南 | 数盟社区
   </title>
   <!-- All in One SEO Pack 2.2.7.6.2 by Michael Torbert of Semper Fi Web Design[32,74] -->
   <!-- /all in one seo pack -->
   <!--
<div align="center">
<a href="http://strata.oreilly.com.cn/hadoop-big-data-cn?cmp=mp-data-confreg-home-stcn16_dataunion_pc" target="_blank"><img src="http://dataunion.org/wp-content/uploads/2016/05/stratabj.jpg"/ ></a>
</div>
-->
   <header id="header-web">
    <div class="header-main">
     <hgroup class="logo">
      <h1>
       <a href="http://dataunion.org/" rel="home" title="数盟社区">
        <img src="http://dataunion.org/wp-content/themes/yzipi/images/logo.png"/>
       </a>
      </h1>
     </hgroup>
     <!--logo-->
     <nav class="header-nav">
      <ul class="menu" id="menu-%e4%b8%bb%e8%8f%9c%e5%8d%95">
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-71" id="menu-item-71">
        <a href="http://dataunion.org/category/events" title="events">
         活动
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-22457" id="menu-item-22457">
          <a href="http://dataunion.org/2016timeline">
           2016档期
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-22459" id="menu-item-22459">
          <a href="http://dataunion.org/category/parterc">
           合作会议
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-has-children menu-item-20869" id="menu-item-20869">
        <a href="http://dataunion.org/category/tech" title="articles">
         文章
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-20867" id="menu-item-20867">
          <a href="http://dataunion.org/category/tech/base" title="base">
           基础架构
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3302" id="menu-item-3302">
          <a href="http://dataunion.org/category/tech/ai" title="ai">
           人工智能
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3303" id="menu-item-3303">
          <a href="http://dataunion.org/category/tech/analysis" title="analysis">
           数据分析
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21920" id="menu-item-21920">
          <a href="http://dataunion.org/category/tech/dm">
           数据挖掘
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3314" id="menu-item-3314">
          <a href="http://dataunion.org/category/tech/viz" title="viz">
           可视化
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3305" id="menu-item-3305">
          <a href="http://dataunion.org/category/tech/devl" title="devl">
           编程语言
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-20876" id="menu-item-20876">
        <a href="http://dataunion.org/category/industry">
         行业
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-16328" id="menu-item-16328">
          <a href="http://dataunion.org/category/industry/case" title="case">
           行业应用
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-2112" id="menu-item-2112">
          <a href="http://dataunion.org/category/industry/demo" title="demo">
           Demo展示
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21562" id="menu-item-21562">
          <a href="http://dataunion.org/category/industry/news">
           行业资讯
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-311" id="menu-item-311">
        <a href="http://dataunion.org/category/sources" title="sources">
         资源
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-20870" id="menu-item-20870">
        <a href="http://dataunion.org/category/books" title="book">
         图书
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21363" id="menu-item-21363">
        <a href="http://dataunion.org/category/training">
         课程
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-21853" id="menu-item-21853">
        <a href="http://dataunion.org/category/jobs">
         职位
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-22050" id="menu-item-22050">
          <a href="http://dataunion.org/category/career">
           职业规划
          </a>
         </li>
        </ul>
       </li>
      </ul>
     </nav>
     <!--header-nav-->
    </div>
   </header>
   <!--header-web-->
   <div id="main">
    <div id="soutab">
     <form action="http://dataunion.org/" class="search" method="get">
     </form>
    </div>
    <div id="container">
     <nav id="mbx">
      当前位置：
      <a href="http://dataunion.org">
       首页
      </a>
      &gt;
      <a href="http://dataunion.org/category/tech">
       文章
      </a>
      &gt;  正文
     </nav>
     <!--mbx-->
     <article class="content">
      <header align="centre" class="contenttitle">
       <div class="mscc">
        <h1 class="mscctitle">
         <a href="http://dataunion.org/15193.html">
          Spark Streaming和Kafka整合开发指南
         </a>
        </h1>
        <address class="msccaddress ">
         <em>
          9,690 次阅读 -
         </em>
         <a href="http://dataunion.org/category/tech" rel="category tag">
          文章
         </a>
        </address>
       </div>
      </header>
      <div class="content-text">
       <p>
        Apache
        <span class="wp_keywordlink_affiliate">
         <a data-original-title="View all posts in Kafka" href="http://www.iteblog.com/archives/tag/kafka" target="_blank" title="">
          Kafka
         </a>
        </span>
        是一个分布式的消息发布-订阅系统。可以说，任何实时大数据处理工具缺少与
        <span class="wp_keywordlink_affiliate">
         <a data-original-title="View all posts in Kafka" href="http://www.iteblog.com/archives/tag/kafka" target="_blank" title="">
          Kafka
         </a>
        </span>
        整合都是不完整的。本文将介绍如何使用
        <span class="wp_keywordlink_affiliate">
         <a data-original-title="View all posts in Spark" href="http://www.iteblog.com/archives/tag/spark" target="_blank" title="">
          Spark
         </a>
        </span>
        Streaming从
        <span class="wp_keywordlink_affiliate">
         <a data-original-title="View all posts in Kafka" href="http://www.iteblog.com/archives/tag/kafka" target="_blank" title="">
          Kafka
         </a>
        </span>
        中接收数据，这里将会介绍两种方法：（1）、使用Receivers和Kafka高层次的API；（2）、使用Direct API，这是使用低层次的KafkaAPI，并没有使用到Receivers，是
        <span class="wp_keywordlink_affiliate">
         <a data-original-title="View all posts in Spark" href="http://www.iteblog.com/archives/tag/spark" target="_blank" title="">
          Spark
         </a>
        </span>
        1.3.0中开始引入的。这两种方法有不同的编程模型，性能特点和语义担保。下文将会一一介绍。
       </p>
       <h2>
        基于Receivers的方法
       </h2>
       <p>
        这个方法使用了Receivers来接收数据。Receivers的实现使用到Kafka高层次的消费者API。对于所有的Receivers，接收到的数据将会保存在
        <span class="wp_keywordlink_affiliate">
         <a data-original-title="View all posts in Spark" href="http://www.iteblog.com/archives/tag/spark" target="_blank" title="">
          Spark
         </a>
        </span>
        executors中，然后由Spark Streaming启动的Job来处理这些数据。
       </p>
       <p>
        然而，在默认的配置下，这种方法在失败的情况下会丢失数据，为了保证零数据丢失，你可以在Spark Streaming中使用WAL日志，这是在Spark 1.2.0才引入的功能，这使得我们可以将接收到的数据保存到WAL中（WAL日志可以存储在HDFS上），所以在失败的时候，我们可以从WAL中恢复，而不至于丢失数据。
       </p>
       <p>
        下面，我将介绍如何使用这种方法来接收数据。
       </p>
       <p>
        <strong>
         1、引入依赖。
        </strong>
       </p>
       <p>
        对于Scala和Java项目，你可以在你的pom.xml文件引入以下依赖：
       </p>
       <div class="syntaxhighlighter " id="highlighter_525388">
        <div class="lines no-wrap">
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               1
              </code>
             </td>
             <td class="content">
              <code class="plain">
               &lt;dependency&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               2
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;groupId&gt;org.apache.spark&lt;/groupId&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               3
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;artifactId&gt;spark-streaming-kafka_2.
              </code>
              <code class="value">
               10
              </code>
              <code class="plain">
               &lt;/artifactId&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               4
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;version&gt;
              </code>
              <code class="value">
               1.3
              </code>
              <code class="plain">
               .
              </code>
              <code class="value">
               0
              </code>
              <code class="plain">
               &lt;/version&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               5
              </code>
             </td>
             <td class="content">
              <code class="plain">
               &lt;/dependency&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
        </div>
       </div>
       <p>
        如果你是使用SBT，可以这么引入：
       </p>
       <div class="syntaxhighlighter " id="highlighter_845751">
        <div class="lines no-wrap">
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               1
              </code>
             </td>
             <td class="content">
              <code class="plain">
               libraryDependencies +=
              </code>
              <code class="string">
               "org.apache.spark"
              </code>
              <code class="plain">
               %
              </code>
              <code class="string">
               "spark-streaming-kafka_2.10"
              </code>
              <code class="plain">
               %
              </code>
              <code class="string">
               "1.3.0"
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
        </div>
       </div>
       <p>
        <strong>
         2、编程
        </strong>
       </p>
       <p>
        在Streaming程序中，引入KafkaUtils，并创建一个输入DStream：
       </p>
       <div class="syntaxhighlighter " id="highlighter_790323">
        <div class="lines no-wrap">
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               1
              </code>
             </td>
             <td class="content">
              <code class="keyword">
               import
              </code>
              <code class="plain">
               org.apache.spark.streaming.kafka.
              </code>
              <code class="keyword">
               _
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               2
              </code>
             </td>
             <td class="content">
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               3
              </code>
             </td>
             <td class="content">
              <code class="keyword">
               val
              </code>
              <code class="plain">
               kafkaStream
              </code>
              <code class="keyword">
               =
              </code>
              <code class="plain">
               KafkaUtils.createStream(streamingContext,
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               4
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               [ZK quorum], [consumer group id], [per-topic number of Kafka partitions to consume])
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
        </div>
       </div>
       <p>
        在创建DStream的时候，你也可以指定数据的Key和Value类型，并指定相应的解码类。
       </p>
       <div class="note">
        <strong>
         需要注意的是：
        </strong>
        <br/>
        1、Kafka中Topic的分区和Spark Streaming生成的RDD中分区不是一个概念。所以，在
        <code>
         KafkaUtils.createStream()
        </code>
        增加特定主题分区数仅仅是增加一个receiver中消费Topic的线程数。并不增加Spark并行处理数据的数量；　　2、对于不同的Group和tpoic我们可以使用多个receivers创建不同的DStreams来并行接收数据；
        <p>
        </p>
        <p>
         3、如果你启用了WAL，这些接收到的数据将会被持久化到日志中，因此，我们需要将storage level 设置为
         <code>
          StorageLevel.MEMORY_AND_DISK_SER
         </code>
         ,也就是：
        </p>
        <div class="syntaxhighlighter " id="highlighter_51993">
         <div class="lines no-wrap">
          <div class="line alt1">
           <table>
            <tbody>
             <tr>
              <td class="number">
               <code>
                1
               </code>
              </td>
              <td class="content">
               <code class="plain">
                KafkaUtils.createStream(..., StorageLevel.MEMORY
               </code>
               <code class="keyword">
                _
               </code>
               <code class="plain">
                AND
               </code>
               <code class="keyword">
                _
               </code>
               <code class="plain">
                DISK
               </code>
               <code class="keyword">
                _
               </code>
               <code class="plain">
                SER)
               </code>
              </td>
             </tr>
            </tbody>
           </table>
          </div>
         </div>
        </div>
       </div>
       <p>
        <strong>
         3、部署
        </strong>
       </p>
       <p>
        对应任何的Spark 应用，我们都是用
        <code>
         spark-submit
        </code>
        来启动你的应用程序，对于Scala和Java用户，如果你使用的是SBT或者是Maven，你可以将spark-streaming-kafka_2.10及其依赖打包进应用程序的Jar文件中，并确保spark-core_2.10和 spark-streaming_2.10标记为provided，因为它们在Spark 安装包中已经存在：
       </p>
       <div class="syntaxhighlighter " id="highlighter_267094">
        <div class="lines no-wrap">
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               01
              </code>
             </td>
             <td class="content">
              <code class="plain">
               &lt;dependency&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               02
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;groupId&gt;org.apache.spark&lt;/groupId&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               03
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;artifactId&gt;spark-streaming
              </code>
              <code class="keyword">
               _
              </code>
              <code class="value">
               2.10
              </code>
              <code class="plain">
               &lt;/artifactId&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               04
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;version&gt;
              </code>
              <code class="value">
               1.3
              </code>
              <code class="plain">
               .
              </code>
              <code class="value">
               0
              </code>
              <code class="plain">
               &lt;/version&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               05
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;scope&gt;provided&lt;/scope&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               06
              </code>
             </td>
             <td class="content">
              <code class="plain">
               &lt;/dependency&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               07
              </code>
             </td>
             <td class="content">
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               08
              </code>
             </td>
             <td class="content">
              <code class="plain">
               &lt;dependency&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               09
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;groupId&gt;org.apache.spark&lt;/groupId&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               10
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;artifactId&gt;spark-core
              </code>
              <code class="keyword">
               _
              </code>
              <code class="value">
               2.10
              </code>
              <code class="plain">
               &lt;/artifactId&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               11
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;version&gt;
              </code>
              <code class="value">
               1.3
              </code>
              <code class="plain">
               .
              </code>
              <code class="value">
               0
              </code>
              <code class="plain">
               &lt;/version&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               12
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;scope&gt;provided&lt;/scope&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               13
              </code>
             </td>
             <td class="content">
              <code class="plain">
               &lt;/dependency&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
        </div>
       </div>
       <p>
        然后使用spark-submit来启动你的应用程序。
       </p>
       <div class="note">
        当然，你也可以不在应用程序Jar文件中打包spark-streaming-kafka_2.10及其依赖，我们可以在spark-submit后面加上–jars参数也可以运行你的程序：
        <p>
        </p>
        <div class="syntaxhighlighter " id="highlighter_321371">
         <div class="lines no-wrap">
          <div class="line alt1">
           <table>
            <tbody>
             <tr>
              <td class="number">
               <code>
                1
               </code>
              </td>
              <td class="content">
               <code class="plain">
                [iteblog@ spark]$ spark-1.3.0-bin-2.6.0/bin/spark-submit  --master yarn-cluster
               </code>
              </td>
             </tr>
            </tbody>
           </table>
          </div>
          <div class="line alt2">
           <table>
            <tbody>
             <tr>
              <td class="number">
               <code>
                2
               </code>
              </td>
              <td class="content">
               <code class="plain">
                --class iteblog.KafkaTest
               </code>
              </td>
             </tr>
            </tbody>
           </table>
          </div>
          <div class="line alt1">
           <table>
            <tbody>
             <tr>
              <td class="number">
               <code>
                3
               </code>
              </td>
              <td class="content">
               <code class="plain">
                --jars lib/spark-streaming-kafka_2.10-1.3.0.jar,
               </code>
              </td>
             </tr>
            </tbody>
           </table>
          </div>
          <div class="line alt2">
           <table>
            <tbody>
             <tr>
              <td class="number">
               <code>
                4
               </code>
              </td>
              <td class="content">
               <code class="plain">
                lib/spark-streaming_2.10-1.3.0.jar,
               </code>
              </td>
             </tr>
            </tbody>
           </table>
          </div>
          <div class="line alt1">
           <table>
            <tbody>
             <tr>
              <td class="number">
               <code>
                5
               </code>
              </td>
              <td class="content">
               <code class="plain">
                lib/kafka_2.10-0.8.1.1.jar,lib/zkclient-0.3.jar,
               </code>
              </td>
             </tr>
            </tbody>
           </table>
          </div>
          <div class="line alt2">
           <table>
            <tbody>
             <tr>
              <td class="number">
               <code>
                6
               </code>
              </td>
              <td class="content">
               <code class="plain">
                lib/metrics-core-2.2.0.jar ./iteblog-1.0-SNAPSHOT.jar
               </code>
              </td>
             </tr>
            </tbody>
           </table>
          </div>
         </div>
        </div>
       </div>
       <p>
        下面是一个完整的例子：
       </p>
       <div class="syntaxhighlighter " id="highlighter_157777">
        <div class="lines no-wrap">
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               01
              </code>
             </td>
             <td class="content">
              <code class="keyword">
               object
              </code>
              <code class="plain">
               KafkaWordCount {
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               02
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="keyword">
               def
              </code>
              <code class="plain">
               main(args
              </code>
              <code class="keyword">
               :
              </code>
              <code class="plain">
               Array[String]) {
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               03
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="keyword">
               if
              </code>
              <code class="plain">
               (args.length &lt;
              </code>
              <code class="value">
               4
              </code>
              <code class="plain">
               ) {
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               04
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               System.err.println(
              </code>
              <code class="string">
               "Usage: KafkaWordCount &lt;zkQuorum&gt; &lt;group&gt; &lt;topics&gt; &lt;numThreads&gt;"
              </code>
              <code class="plain">
               )
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               05
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               System.exit(
              </code>
              <code class="value">
               1
              </code>
              <code class="plain">
               )
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               06
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               }
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               07
              </code>
             </td>
             <td class="content">
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               08
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               StreamingExamples.setStreamingLogLevels()
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               09
              </code>
             </td>
             <td class="content">
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               10
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="keyword">
               val
              </code>
              <code class="plain">
               Array(zkQuorum, group, topics, numThreads)
              </code>
              <code class="keyword">
               =
              </code>
              <code class="plain">
               args
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               11
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="keyword">
               val
              </code>
              <code class="plain">
               sparkConf
              </code>
              <code class="keyword">
               =
              </code>
              <code class="keyword">
               new
              </code>
              <code class="plain">
               SparkConf().setAppName(
              </code>
              <code class="string">
               "KafkaWordCount"
              </code>
              <code class="plain">
               )
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               12
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="keyword">
               val
              </code>
              <code class="plain">
               ssc
              </code>
              <code class="keyword">
               =
              </code>
              <code class="keyword">
               new
              </code>
              <code class="plain">
               StreamingContext(sparkConf, Seconds(
              </code>
              <code class="value">
               2
              </code>
              <code class="plain">
               ))
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               13
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               ssc.checkpoint(
              </code>
              <code class="string">
               "checkpoint"
              </code>
              <code class="plain">
               )
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               14
              </code>
             </td>
             <td class="content">
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               15
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="keyword">
               val
              </code>
              <code class="plain">
               topicMap
              </code>
              <code class="keyword">
               =
              </code>
              <code class="plain">
               topics.split(
              </code>
              <code class="string">
               ","
              </code>
              <code class="plain">
               ).map((
              </code>
              <code class="keyword">
               _
              </code>
              <code class="plain">
               ,numThreads.toInt)).toMap
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               16
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="keyword">
               val
              </code>
              <code class="plain">
               lines
              </code>
              <code class="keyword">
               =
              </code>
              <code class="plain">
               KafkaUtils.createStream(ssc, zkQuorum, group, topicMap).map(
              </code>
              <code class="keyword">
               _
              </code>
              <code class="plain">
               .
              </code>
              <code class="keyword">
               _
              </code>
              <code class="value">
               2
              </code>
              <code class="plain">
               )
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               17
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="keyword">
               val
              </code>
              <code class="plain">
               words
              </code>
              <code class="keyword">
               =
              </code>
              <code class="plain">
               lines.flatMap(
              </code>
              <code class="keyword">
               _
              </code>
              <code class="plain">
               .split(
              </code>
              <code class="string">
               " "
              </code>
              <code class="plain">
               ))
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               18
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="keyword">
               val
              </code>
              <code class="plain">
               wordCounts
              </code>
              <code class="keyword">
               =
              </code>
              <code class="plain">
               words.map(x
              </code>
              <code class="keyword">
               =
              </code>
              <code class="plain">
               &gt; (x,
              </code>
              <code class="value">
               1
              </code>
              <code class="plain">
               L))
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               19
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               .reduceByKeyAndWindow(
              </code>
              <code class="keyword">
               _
              </code>
              <code class="plain">
               +
              </code>
              <code class="keyword">
               _
              </code>
              <code class="plain">
               ,
              </code>
              <code class="keyword">
               _
              </code>
              <code class="plain">
               -
              </code>
              <code class="keyword">
               _
              </code>
              <code class="plain">
               , Minutes(
              </code>
              <code class="value">
               10
              </code>
              <code class="plain">
               ), Seconds(
              </code>
              <code class="value">
               2
              </code>
              <code class="plain">
               ),
              </code>
              <code class="value">
               2
              </code>
              <code class="plain">
               )
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               20
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               wordCounts.print()
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               21
              </code>
             </td>
             <td class="content">
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               22
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               ssc.start()
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               23
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               ssc.awaitTermination()
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               24
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               }
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               25
              </code>
             </td>
             <td class="content">
              <code class="plain">
               }
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
        </div>
       </div>
       <h2>
        基于Direct API的方法
       </h2>
       <p>
        和基于Receiver接收数据不一样，这种方式定期地从Kafka的topic+partition中查询最新的偏移量，再根据定义的偏移量范围在每个batch里面处理数据。当作业需要处理的数据来临时，spark通过调用Kafka的简单消费者API读取一定范围的数据。这个特性目前还处于试验阶段，而且仅仅在Scala和Java语言中提供相应的API。
       </p>
       <p>
        和基于Receiver方式相比，这种方式主要有一些几个优点：
        <br/>
        （1）、
        <strong>
         简化并行。
        </strong>
        我们不需要创建多个Kafka 输入流，然后union他们。而使用directStream，
        <span class="wp_keywordlink_affiliate">
         <a data-original-title="View all posts in Spark" href="http://www.iteblog.com/archives/tag/spark" target="_blank" title="">
          Spark
         </a>
        </span>
        Streaming将会创建和Kafka分区一样的RDD分区个数，而且会从Kafka并行地读取数据，也就是说Spark分区将会和Kafka分区有一一对应的关系，这对我们来说很容易理解和使用；
       </p>
       <p>
        （2）、
        <strong>
         高效。
        </strong>
        第一种实现零数据丢失是通过将数据预先保存在WAL中，这将会复制一遍数据，这种方式实际上很不高效，因为这导致了数据被拷贝两次：一次是被Kafka复制；另一次是写到WAL中。但是本文介绍的方法因为没有Receiver，从而消除了这个问题，所以不需要WAL日志；
       </p>
       <p>
        （3）、
        <strong>
         恰好一次语义（Exactly-once semantics）。
        </strong>
        <a data-original-title="Spark Streaming和Kafka整合开发指南(一)" href="http://www.iteblog.com/archives/1322" target="_blank" title="">
         《Spark Streaming和Kafka整合开发指南(一)》
        </a>
        文章中通过使用Kafka高层次的API把偏移量写入Zookeeper中，这是读取Kafka中数据的传统方法。虽然这种方法可以保证零数据丢失，但是还是存在一些情况导致数据会丢失，因为在失败情况下通过Spark Streaming读取偏移量和Zookeeper中存储的偏移量可能不一致。而本文提到的方法是通过Kafka低层次的API，并没有使用到Zookeeper，偏移量仅仅被Spark Streaming保存在Checkpoint中。这就消除了Spark Streaming和Zookeeper中偏移量的不一致，而且可以保证每个记录仅仅被Spark Streaming读取一次，即使是出现故障。
       </p>
       <p>
        但是本方法唯一的坏处就是没有更新Zookeeper中的偏移量，所以基于Zookeeper的Kafka监控工具将会无法显示消费的状况。然而你可以通过Spark提供的API手动地将偏移量写入到Zookeeper中。如何使用呢？其实和方法一差不多
       </p>
       <p>
        <strong>
         1、引入依赖。
        </strong>
       </p>
       <p>
        对于Scala和Java项目，你可以在你的pom.xml文件引入以下依赖：
       </p>
       <div class="syntaxhighlighter " id="highlighter_200683">
        <div class="lines no-wrap">
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               1
              </code>
             </td>
             <td class="content">
              <code class="plain">
               &lt;dependency&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               2
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;groupId&gt;org.apache.spark&lt;/groupId&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               3
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;artifactId&gt;spark-streaming-kafka_2.
              </code>
              <code class="value">
               10
              </code>
              <code class="plain">
               &lt;/artifactId&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               4
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;version&gt;
              </code>
              <code class="value">
               1.3
              </code>
              <code class="plain">
               .
              </code>
              <code class="value">
               0
              </code>
              <code class="plain">
               &lt;/version&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               5
              </code>
             </td>
             <td class="content">
              <code class="plain">
               &lt;/dependency&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
        </div>
       </div>
       <p>
        如果你是使用SBT，可以这么引入：
       </p>
       <div class="syntaxhighlighter " id="highlighter_758055">
        <div class="lines no-wrap">
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               1
              </code>
             </td>
             <td class="content">
              <code class="plain">
               libraryDependencies +=
              </code>
              <code class="string">
               "org.apache.spark"
              </code>
              <code class="plain">
               %
              </code>
              <code class="string">
               "spark-streaming-kafka_2.10"
              </code>
              <code class="plain">
               %
              </code>
              <code class="string">
               "1.3.0"
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
        </div>
       </div>
       <p>
        <strong>
         2、编程
        </strong>
       </p>
       <p>
        在Streaming应用程序代码中，引入KafkaUtils ，并创建DStream输入流：
       </p>
       <div class="syntaxhighlighter " id="highlighter_926459">
        <div class="lines no-wrap">
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               1
              </code>
             </td>
             <td class="content">
              <code class="keyword">
               import
              </code>
              <code class="plain">
               org.apache.spark.streaming.kafka.
              </code>
              <code class="keyword">
               _
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               2
              </code>
             </td>
             <td class="content">
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               3
              </code>
             </td>
             <td class="content">
              <code class="keyword">
               val
              </code>
              <code class="plain">
               directKafkaStream
              </code>
              <code class="keyword">
               =
              </code>
              <code class="plain">
               KafkaUtils.createDirectStream[
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               4
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               [key
              </code>
              <code class="keyword">
               class
              </code>
              <code class="plain">
               ], [value
              </code>
              <code class="keyword">
               class
              </code>
              <code class="plain">
               ], [key decoder
              </code>
              <code class="keyword">
               class
              </code>
              <code class="plain">
               ], [value decoder
              </code>
              <code class="keyword">
               class
              </code>
              <code class="plain">
               ] ](
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               5
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               streamingContext, [map of Kafka parameters], [set of topics to consume])
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
        </div>
       </div>
       <p>
        在 Kafka parameters参数中，你必须指定 metadata.broker.list或者bootstrap.servers参数。在默认情况下，Spark Streaming将会使用最大的偏移量来读取Kafka每个分区的数据。如果你配置了auto.offset.reset为smallest，那么它将会从最小的偏移量开始消费。
       </p>
       <p>
        当然，你也可以使用KafkaUtils.createDirectStream的另一个版本从任意的位置消费数据。如果你想回去每个batch中Kafka的偏移量，你可以如下操作：
       </p>
       <div class="syntaxhighlighter " id="highlighter_624254">
        <div class="lines no-wrap">
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               1
              </code>
             </td>
             <td class="content">
              <code class="plain">
               directKafkaStream.foreachRDD { rdd
              </code>
              <code class="keyword">
               =
              </code>
              <code class="plain">
               &gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               2
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="keyword">
               val
              </code>
              <code class="plain">
               offsetRanges
              </code>
              <code class="keyword">
               =
              </code>
              <code class="plain">
               rdd.asInstanceOf[HasOffsetRanges]
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               3
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="comments">
               // offsetRanges.length = # of Kafka partitions being consumed
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               4
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               ...
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               5
              </code>
             </td>
             <td class="content">
              <code class="plain">
               }
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
        </div>
       </div>
       <p>
        你可以通过这种方式来手动地更新Zookeeper里面的偏移量，使得基于Zookeeper偏移量的Kafka监控工具可以使用。
       </p>
       <p>
        还有一点需要注意，因为这里介绍的方法没有使用到Receiver，所以Spark中关于spark.streaming.receiver.*相关的配置参数将不会对创建DStreams 有影响。我们可以使用spark.streaming.kafka.*参数进行配置。
       </p>
       <p>
        <strong>
         3、部署
        </strong>
       </p>
       <p>
        对应任何的Spark 应用，我们都是用
        <code>
         spark-submit
        </code>
        来启动你的应用程序，对于Scala和Java用户，如果你使用的是SBT或者是Maven，你可以将spark-streaming-kafka_2.10及其依赖打包进应用程序的Jar文件中，并确保spark-core_2.10和 spark-streaming_2.10标记为provided，因为它们在Spark 安装包中已经存在：
       </p>
       <div class="syntaxhighlighter " id="highlighter_745091">
        <div class="lines no-wrap">
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               01
              </code>
             </td>
             <td class="content">
              <code class="plain">
               &lt;dependency&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               02
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;groupId&gt;org.apache.spark&lt;/groupId&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               03
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;artifactId&gt;spark-streaming
              </code>
              <code class="keyword">
               _
              </code>
              <code class="value">
               2.10
              </code>
              <code class="plain">
               &lt;/artifactId&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               04
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;version&gt;
              </code>
              <code class="value">
               1.3
              </code>
              <code class="plain">
               .
              </code>
              <code class="value">
               0
              </code>
              <code class="plain">
               &lt;/version&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               05
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;scope&gt;provided&lt;/scope&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               06
              </code>
             </td>
             <td class="content">
              <code class="plain">
               &lt;/dependency&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               07
              </code>
             </td>
             <td class="content">
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               08
              </code>
             </td>
             <td class="content">
              <code class="plain">
               &lt;dependency&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               09
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;groupId&gt;org.apache.spark&lt;/groupId&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               10
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;artifactId&gt;spark-core
              </code>
              <code class="keyword">
               _
              </code>
              <code class="value">
               2.10
              </code>
              <code class="plain">
               &lt;/artifactId&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               11
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;version&gt;
              </code>
              <code class="value">
               1.3
              </code>
              <code class="plain">
               .
              </code>
              <code class="value">
               0
              </code>
              <code class="plain">
               &lt;/version&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt2">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               12
              </code>
             </td>
             <td class="content">
              <code class="spaces">
              </code>
              <code class="plain">
               &lt;scope&gt;provided&lt;/scope&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
         <div class="line alt1">
          <table>
           <tbody>
            <tr>
             <td class="number">
              <code>
               13
              </code>
             </td>
             <td class="content">
              <code class="plain">
               &lt;/dependency&gt;
              </code>
             </td>
            </tr>
           </tbody>
          </table>
         </div>
        </div>
       </div>
       <p>
        然后使用spark-submit来启动你的应用程序。
       </p>
       <div class="note">
       </div>
       <div class="note">
        英文出处：https://spark.apache.org/docs/latest/streaming-kafka-integration.html
       </div>
       <p>
        <strong>
         转载自
         <a data-original-title="" href="http://www.iteblog.com/" title="">
          过往记忆（http://www.iteblog.com/）
         </a>
         <br/>
         本文链接地址:
         <a data-original-title="" href="http://www.iteblog.com/archives/1322" title="">
          《Spark Streaming和Kafka整合开发指南(一)》（http://www.iteblog.com/archives/1322）
         </a>
        </strong>
       </p>
      </div>
      <div>
       <strong>
        注：转载文章均来自于公开网络，仅供学习使用，不会用于任何商业用途，如果侵犯到原作者的权益，请您与我们联系删除或者授权事宜，联系邮箱：contact@dataunion.org。转载数盟网站文章请注明原文章作者，否则产生的任何版权纠纷与数盟无关。
       </strong>
      </div>
      <!--content_text-->
      <div class="fenxian">
       <!-- JiaThis Button BEGIN -->
       <div class="jiathis_style_32x32">
        <p class="jiathis_button_weixin">
        </p>
        <p class="jiathis_button_tsina">
        </p>
        <p class="jiathis_button_qzone">
        </p>
        <p class="jiathis_button_cqq">
        </p>
        <p class="jiathis_button_tumblr">
        </p>
        <a class="jiathis jiathis_txt jtico jtico_jiathis" href="http://www.jiathis.com/share" target="_blank">
        </a>
        <p class="jiathis_counter_style">
        </p>
       </div>
       <!-- JiaThis Button END -->
      </div>
     </article>
     <!--content-->
     <!--相关文章-->
     <div class="xianguan">
      <div class="xianguantitle">
       相关文章！
      </div>
      <ul class="pic">
       <li>
        <a href="http://dataunion.org/20348.html">
         <img src="http://dataunion.org/wp-content/uploads/2015/08/t0123c56de49c9c3de9_副本.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/20348.html" rel="bookmark" title="Apache kafka 工作原理介绍">
         Apache kafka 工作原理介绍
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/17905.html">
         <img src="http://dataunion.org/wp-content/uploads/2015/05/t0123c56de49c9c3de9-300x225.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/17905.html" rel="bookmark" title="Kafka设计解析（二） Kafka High Availability （上）">
         Kafka设计解析（二） Kafka High Availability （上）
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/17873.html">
         <img src="http://dataunion.org/wp-content/uploads/2015/05/t0123c56de49c9c3de9-300x225.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/17873.html" rel="bookmark" title="Kafka设计解析（一） Kafka背景及架构介绍">
         Kafka设计解析（一） Kafka背景及架构介绍
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/16662.html">
         <img src="http://dataunion.org/wp-content/uploads/2015/05/t013d48bf948186f511-300x148.png"/>
        </a>
        <a class="link" href="http://dataunion.org/16662.html" rel="bookmark" title="Kafka文件存储机制那些事">
         Kafka文件存储机制那些事
        </a>
       </li>
      </ul>
     </div>
     <!--相关文章-->
     <div class="comment" id="comments">
      <!-- You can start editing here. -->
      <!-- If comments are open, but there are no comments. -->
      <div class="title">
       期待你一针见血的评论，Come on！
      </div>
      <div id="respond">
       <p>
        不用想啦，马上
        <a href="http://dataunion.org/wp-login.php?redirect_to=http%3A%2F%2Fdataunion.org%2F15193.html">
         "登录"
        </a>
        发表自已的想法.
       </p>
      </div>
     </div>
     <!-- .nav-single -->
    </div>
    <!--Container End-->
    <aside id="sitebar">
     <div class="sitebar_list2">
      <div class="wptag">
       <span class="tagtitle">
        热门标签+
       </span>
       <div class="tagg">
        <ul class="menu" id="menu-%e5%8f%8b%e6%83%85%e9%93%be%e6%8e%a5">
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1605" id="menu-item-1605">
          <a href="http://taidizh.com/">
           泰迪智慧
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-20884" id="menu-item-20884">
          <a href="http://www.transwarp.cn/">
           星环科技
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-3538" id="menu-item-3538">
          <a href="http://datall.org/">
           珈和遥感
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-20888" id="menu-item-20888">
          <a href="http://www.chinahadoop.cn/">
           小象学院
          </a>
         </li>
        </ul>
       </div>
      </div>
     </div>
     <div class="sitebar_list">
      <div class="textwidget">
       <div align="center">
        <a href="http://study.163.com/course/courseMain.htm?courseId=991022" target="_blank">
         <img src="http://dataunion.org/wp-content/uploads/2016/03/dv.jpg"/>
        </a>
       </div>
      </div>
     </div>
     <div class="sitebar_list">
      <h4 class="sitebar_title">
       文章分类
      </h4>
      <div class="tagcloud">
       <a class="tag-link-44" href="http://dataunion.org/category/industry/demo" style="font-size: 10.204724409449pt;" title="4个话题">
        Demo展示
       </a>
       <a class="tag-link-31" href="http://dataunion.org/category/experts" style="font-size: 15.826771653543pt;" title="52个话题">
        专家团队
       </a>
       <a class="tag-link-870" href="http://dataunion.org/category/tech/ai" style="font-size: 19.795275590551pt;" title="273个话题">
        人工智能
       </a>
       <a class="tag-link-488" href="http://dataunion.org/category/%e5%8a%a0%e5%85%a5%e6%95%b0%e7%9b%9f" style="font-size: 8pt;" title="1个话题">
        加入数盟
       </a>
       <a class="tag-link-869" href="http://dataunion.org/category/tech/viz" style="font-size: 17.204724409449pt;" title="93个话题">
        可视化
       </a>
       <a class="tag-link-30" href="http://dataunion.org/category/partners" style="font-size: 10.645669291339pt;" title="5个话题">
        合作伙伴
       </a>
       <a class="tag-link-889" href="http://dataunion.org/category/parterc" style="font-size: 11.582677165354pt;" title="8个话题">
        合作会议
       </a>
       <a class="tag-link-104" href="http://dataunion.org/category/books" style="font-size: 12.96062992126pt;" title="15个话题">
        图书
       </a>
       <a class="tag-link-220" href="http://dataunion.org/category/tech/base" style="font-size: 19.850393700787pt;" title="281个话题">
        基础架构
       </a>
       <a class="tag-link-219" href="http://dataunion.org/category/tech/analysis" style="font-size: 19.409448818898pt;" title="232个话题">
        数据分析
       </a>
       <a class="tag-link-887" href="http://dataunion.org/category/tech/dm" style="font-size: 13.291338582677pt;" title="17个话题">
        数据挖掘
       </a>
       <a class="tag-link-34" href="http://dataunion.org/category/tech" style="font-size: 20.732283464567pt;" title="404个话题">
        文章
       </a>
       <a class="tag-link-1" href="http://dataunion.org/category/uncategorized" style="font-size: 22pt;" title="693个话题">
        未分类
       </a>
       <a class="tag-link-4" href="http://dataunion.org/category/events" style="font-size: 14.503937007874pt;" title="29个话题">
        活动
       </a>
       <a class="tag-link-890" href="http://dataunion.org/category/tech/%e6%b7%b1%e5%ba%a6%e5%ad%a6%e4%b9%a0" style="font-size: 10.204724409449pt;" title="4个话题">
        深度学习
       </a>
       <a class="tag-link-221" href="http://dataunion.org/category/tech/devl" style="font-size: 18.968503937008pt;" title="193个话题">
        编程语言
       </a>
       <a class="tag-link-888" href="http://dataunion.org/category/career" style="font-size: 15.661417322835pt;" title="48个话题">
        职业规划
       </a>
       <a class="tag-link-5" href="http://dataunion.org/category/jobs" style="font-size: 14.11811023622pt;" title="25个话题">
        职位
       </a>
       <a class="tag-link-871" href="http://dataunion.org/category/industry" style="font-size: 15.716535433071pt;" title="49个话题">
        行业
       </a>
       <a class="tag-link-613" href="http://dataunion.org/category/industry/case" style="font-size: 16.984251968504pt;" title="84个话题">
        行业应用
       </a>
       <a class="tag-link-885" href="http://dataunion.org/category/industry/news" style="font-size: 17.425196850394pt;" title="102个话题">
        行业资讯
       </a>
       <a class="tag-link-10" href="http://dataunion.org/category/training" style="font-size: 14.228346456693pt;" title="26个话题">
        课程
       </a>
       <a class="tag-link-16" href="http://dataunion.org/category/sources" style="font-size: 15.661417322835pt;" title="48个话题">
        资源
       </a>
      </div>
     </div>
     <div class="sitebar_list">
      <h4 class="sitebar_title">
       功能
      </h4>
      <ul>
       <li>
        <a href="http://dataunion.org/wp-login.php?action=register">
         注册
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/wp-login.php">
         登录
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/feed">
         文章
         <abbr title="Really Simple Syndication">
          RSS
         </abbr>
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/comments/feed">
         评论
         <abbr title="Really Simple Syndication">
          RSS
         </abbr>
        </a>
       </li>
       <li>
        <a href="https://cn.wordpress.org/" title="基于WordPress，一个优美、先进的个人信息发布平台。">
         WordPress.org
        </a>
       </li>
      </ul>
     </div>
    </aside>
    <div class="clear">
    </div>
   </div>
   <!--main-->
   ﻿
   <footer id="dibu">
    <div class="about">
     <div class="right">
      <ul class="menu" id="menu-%e5%ba%95%e9%83%a8%e8%8f%9c%e5%8d%95">
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-18024" id="menu-item-18024">
        <a href="http://dataunion.org/category/partners">
         合作伙伴
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20881" id="menu-item-20881">
        <a href="http://dataunion.org/contribute">
         文章投稿
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-20872" id="menu-item-20872">
        <a href="http://dataunion.org/category/%e5%8a%a0%e5%85%a5%e6%95%b0%e7%9b%9f">
         加入数盟
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-22441" id="menu-item-22441">
        <a href="http://dataunion.org/f-links">
         友情链接
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20874" id="menu-item-20874">
        <a href="http://dataunion.org/aboutus">
         关于数盟
        </a>
       </li>
      </ul>
      <p class="banquan">
       数盟社区        ，
        做最棒的数据科学社区
      </p>
     </div>
     <div class="left">
      <ul class="bottomlist">
       <li>
        <a href="http://weibo.com/DataScientistUnion  " target="_blank" 　title="">
         <img src="http://dataunion.org/wp-content/themes/yzipi/images/weibo.png"/>
        </a>
       </li>
       <li>
        <a class="cd-popup-trigger" href="http://dataunion.org/15193.html#0">
         <img src="http://dataunion.org/wp-content/themes/yzipi/images/weixin.png"/>
        </a>
       </li>
      </ul>
      <div class="cd-popup">
       <div class="cd-popup-container">
        <h1>
         扫描二维码,加微信公众号
        </h1>
        <img src="http://dataunion.org/wp-content/themes/yzipi/images/2014-12-06-1515289049.png"/>
        <a class="cd-popup-close" href="http://dataunion.org/15193.html">
        </a>
       </div>
       <!-- cd-popup-container -->
      </div>
      <!-- cd-popup -->
     </div>
    </div>
    <!--about-->
    <div class="bottom">
     <a href="http://dataunion.org/">
      数盟社区
     </a>
     <a href="http://www.miitbeian.gov.cn/" rel="external nofollow" target="_blank">
      京ICP备14026740号
     </a>
     联系我们：
     <a href="mailto:contact@dataunion.org" target="_blank">
      contact@dataunion.org
     </a>
     <div class="tongji">
     </div>
     <!--bottom-->
     <div class="scroll" id="scroll" style="display:none;">
      ︿
     </div>
    </div>
   </footer>
   <!--dibu-->
  </div>
 </body>
</html>